//#include<iostream>
//using namespace std;
//
//template<class T>
//class Share_ptr
//{
//public:
//	Share_ptr(const T*ptr=nullptr):_ptr(ptr),_pcount(new int(1))
//	{}
//
//	Share_ptr(const shared_ptr<T>& sp)_ptr(sp._ptr),_pcount(sp._pcount)
//	{
//		++(*_pcount);
//	}
//
//	shared_ptr<T>& operator=(shared_ptr<T>& sp)
//	{
//		if (_ptr != sp._ptr) 
//		{
//			if (--(*_pcount) == 0)
//			{
//				delete _pcount;
//				delete _ptr;
//			}
//			_ptr = sp._ptr;
//			_pcount = sp._pcount;
//			++(*_pcount);
//		}
//		return *this;
//	}
//
//	T& operator*()
//	{
//		return *_ptr;
//	}
//
//	T* operator->()
//	{
//		return _ptr;
//	}
//
//
//
//	~Share_ptr()
//	{
//		if (_ptr)
//		{
//			if (*_pcount == 1)
//			{
//				delete _ptr;
//				_ptr = nullptr;
//			}
//		}
//	}
//
//private:
//	T* _ptr;
//	int* _pcount;
//};
//
//
//int main()
//{
//	return 0;
//}